/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package src.j2ee.compumake.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import src.j2ee.compumake.dominio.Interfaz;
import src.j2ee.compumake.dominio.Marca;
import src.j2ee.compumake.dominio.TipoUnidadOptica;
import src.j2ee.compumake.dominio.UnidadOptica;

/************************************************************************
 **                                                                    **
 ** Nombre: DAOUnidadOptica.java                                       **
 ** Version: v1.0.0                                                    **
 ** Autor: amado.cante                                                 **
 ** Creado: 25/04/2013                                                 **
 ** Modificado:                                                        **
 ** Diagrama:                                                          **
 ** Caso de uso:                                                       **
 **                                                                    **
 ***********************************************************************/
public class DAOUnidadOptica {
    private static final String TABLA_UNIDADES = "UnidadesOpticas";
    private static final String COLUMNA_ID_TUO = "idUnidadesOpticas";
    private static final String MARCA = "marca";
    private static final String NOMBRE = "nombre";
    private static final String TIPO = "tipo";
    private static final String INTERFAZ = "interfaz";
    private Connection conexion;
    private AccesoBaseDatos acceso = new AccesoBaseDatos();
    
    public DAOUnidadOptica(){
        this.conexion = this.acceso.abrirConexion();
    }
    
    public UnidadOptica insertarUnidadOptica(UnidadOptica unidadOptica){
        UnidadOptica unidad;
        try{
            String query = "INSERT INTO "+TABLA_UNIDADES+"("+MARCA+","+NOMBRE
                    +","+TIPO+","+INTERFAZ+") VALUES('"+unidadOptica.getMarca().getClave()
                    +"','"+unidadOptica.getNombre()+"','"+unidadOptica.getTipoUnidad().getIdTipoUnidad()
                    +"','"+unidadOptica.getInterfaz().getIdInterfaz()+"');";
            PreparedStatement sentencia = conexion.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
            int afectados = sentencia.executeUpdate();
            if(afectados==0){
                return null;
            }else{
                ResultSet generado = sentencia.getGeneratedKeys();
                if(generado.next()){
                    int id = generado.getInt(1);
                    unidad = unidadOptica;
                    unidad.setClave(id);
                    return unidad;
                }else{
                    return null;
                }
            }
        }catch(SQLException ex){
            return null;
        }
    }
    
    public UnidadOptica buscaUnidadOptica(int idUnidadOptica){
        try{
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String query = "SELECT * FROM "+TABLA_UNIDADES+" WHERE "+COLUMNA_ID_TUO
                    +"='"+idUnidadOptica+"';";
            ResultSet resultado = sentencia.executeQuery(query);
            if(resultado.first()){
                DAOProducto daoproducto = new DAOProducto();
                DAOInterfaz daointerfaz = new DAOInterfaz();
                DAOTipoUnidad daotuo = new DAOTipoUnidad();
                DAOMarca daomarca = new DAOMarca();
                int idUnidad = resultado.getInt(1);
                int idMarca = resultado.getInt(2);
                String nombre = resultado.getString(3);
                int idTipoUnidad = resultado.getInt(4);
                int idInterfaz = resultado.getInt(5);
                Marca marca = daomarca.buscaMarca(idMarca);
                Interfaz interfaz = daointerfaz.buscaInterfaz(idInterfaz);
                TipoUnidadOptica tuo = daotuo.buscarTipoUnidad(idTipoUnidad);
                int existencias = daoproducto.obtenerExistenciaProducto(idUnidadOptica, (daoproducto.getTipos().get(UnidadOptica.class)).intValue());
                double precio = daoproducto.obtenerPrecioProducto(idUnidadOptica, (daoproducto.getTipos().get(UnidadOptica.class)).intValue());
                String ruta = daoproducto.obtenerRutaImagen(idUnidadOptica,(daoproducto.getTipos().get(UnidadOptica.class)).intValue());
                UnidadOptica uo = new UnidadOptica(tuo, interfaz, idUnidadOptica, nombre, marca, existencias, ruta, precio);
                return uo;
            }else{
                return null;
            }
        }catch(SQLException ex){
            return null;
        }
    }
    
    public ArrayList<UnidadOptica> listarUnidadesOpticas(){
        ArrayList<UnidadOptica> unidades = new ArrayList<>();
        try{
            Statement sentencia = acceso.crearSentenciaBD(conexion);
            String query = "SELECT "+COLUMNA_ID_TUO+" FROM "+TABLA_UNIDADES;
            ResultSet resultado = sentencia.executeQuery(query);
            while(resultado.next()){
                int idUnidadOptica = resultado.getInt(1);
                UnidadOptica uo = this.buscaUnidadOptica(idUnidadOptica);
                if(uo!=null){
                    unidades.add(uo);
                }
            }
            return unidades;
        }catch(SQLException ex){
            return null;
        }
    }
}
